home *** CD-ROM | disk | FTP | other *** search
- ;Joystick-Abfrage per USR()-Funktion
- ;_
- :usrvec = $311 ;USR()-Vektor
-
- :toint = $b1aa ;FAC in Integer wandeln
- :tofac = $bc44 ;Integerzahl in FAC uebertragen
- :illq = $b248 ;'ILLEGAL QUANTITY' ausgeben
-
- :cia = $dc00 ;fuer Port2. Port1 liegt bei $dd00
- :ddra = cia+2 ;Datenrichtungsregister Port A
- :pra = cia ;Datenregister Port A
-
- org $801 ;Start am BASIC-Anfang
-
- :next w basend ;Pointer auf Ende
- :linnum w 1987 ;Zeilennummer
- :sys b $9e ;Token fuer SYS
- :adrs b "2070" ;Adresse im Klartext
- :linend b 0 ;Kennzeichen fuer Zeilenende
- :basend w 0 ;Kennzeichen fuer Programmende
-
- s 2070-*
-
- :init lda #<usrjoy ;USR()-Vektor auf eigene
- sta usrvec ;Routine verbiegen
- lda #>usrjoy
- sta usrvec+1
-
- lda #<new ;BASIC-Anfang hinter
- sta $2b ;Programm verlegen
- lda #>new
- sta $2c
- jsr $a659 ;RESTORE
- jmp $a7ae ;RUN
-
- ;Hier beginnt die USR()-Routine
- ;_
- :usrjoy jsr toint ;FAC in Akku/Y
- cmp #0 ;High-Byte = 0?
- bne error ;sonst Fehler
- sei ;Tastatur abhaengen
- ldx #%11100000 ;Joystick-Bits als Eingang
- stx ddra
- lda pra ;Bitmuster fuer Joystick
- ldx #%11111111 ;Port A komplett als
- stx ddra ;Ausgang (Original)
- cli ;Tastaturabfrage wieder zulassen
- cpy #1 ;x-Richtung gefragt?
- beq joyx
- cpy #2 ;y-Richtung gefragt?
- beq joyy
- cpy #3 ;Feuer gefragt?
- beq joybut
- :error jmp illq ;sonst Fehler
-
- :joybut ora #$08 ;Feuer nie negativ
- lsr ;gefragte Bits in Carry
- :joyx lsr
- lsr
- :joyy lsr
- bcs plus
- lda #$ff ;Minus 1
- tay
- bne raus ;springt immer
- :plus lsr
- bcs null
- lda #0 ;Plus 1
- ldy #1
- bne raus
- :null lda #0 ;Null
- tay
- :raus sta $62 ;fuer TOFAC
- sty $63
- ldx #$90 ;auch fuer TOFAC
- lda #0 ;Flag fuer numerisches
- sta $0d ;Ergebnis
- jmp tofac ;TOFAC endet mit RTS
-
- :ende b 0
- :new w 0
-
-